package com.koron.css2.workflow;

import com.koron.css2.serviceManage.bean.UserInfoBean;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.koron.ebs.mybatis.SessionFactory;
import org.swan.bean.MessageBean;

public interface ProcessInterface {
	
	public Logger logger = LogManager.getLogger(ProcessInterface.class);
	
	/**
	 * 驳回操作
	 */
	int OPERATION_REJECT = 1;
	/**
	 * 转办
	 */
	int OPERATION_TRANSFER = 2;
	/**
	 * 沟通
 	 */
	int OPERATION_COMMUNICATE = 4;
	/**
	 * 催办
 	 */
	int OPERATION_ALRAM = 8;
	/**
	 * 废弃
	 */
	int OPERATION_SUSPEND = 16;
	/**
	 * 通过
	 */
	int OPERATION_AGREE = 32;
	/**
	 * 沟通回复
	 */
	int OPERATION_REPLY = 64;
	/**
	 * 取消沟通
	 */
	int OPERATION_CANCLE_COMMUNICATE = 128;
	/**
	 * 撤回
	 */
	int OPERATION_RECALL = 256;
	
	/**
	 * 主要功能：流程审批执行前业务单据业务逻辑检查<br>
	 * 描&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;述：包括一些数据的校验，逻辑判断之类的<br>
	 * 如果该方法执行返回失败，则不执行相关的流程提交的操作，直接进行事务回滚
	 * @param factory
	 * @param userInfo
	 * @param billId 单据id
	 * @param fromNodeCode 审批时的开始节点编号
	 * @param operation <br> 1 驳回 <br> 2 转办 <br> 4 沟通 <br> 8 催办 <br> 16 挂起 <br> 32 通过 <br> 64 沟通  <br> 128 取消沟通 <br> 256 撤回
	 * @return
	 */
	public MessageBean<?> before(SessionFactory factory, UserInfoBean userInfo, String billId, String fromNodeCode, int operation);
	
	/** 
	 * 主要功能：流程审批执行前业务单据事务提交<br>
	 * 描&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;述：如果流程提交执行成功则会执行该方法，<br>
	 * 用于相关单据业务逻辑处理之后进行事务提交<br>
	 * 该过程是不可逆的，如果该方法执行失败，进行了事务回滚<br>
	 * 则会导致流程状态与单据状态不一致的问题，未尽量避免该问题<br>
	 * 所以应该先在before 方法执行相关的业务逻辑检查
	 * @param factory
	 * @param userInfo
	 * @param billId 单据id
	 * @param fromNodeCode 审批时的开始节点编号
	 * @param toNodeCode 审批到节点编号
	 * @return
	 */
	public MessageBean<?> after(SessionFactory factory, UserInfoBean userInfo, String billId, String fromNodeCode, String toNodeCode);
	
}
